草庐IT

c++ - C 和 C++ 中 union 的用途

全部标签

c++ - union 提取数据

union不会在this像这样使用时会导致UB的问题:unionData{unsignedintintValue;unsignedcharargbBytes[4];};Datadata;data.intValue=1235347;unsignedcharalpha=data.argbBytes[0];//UB?我在考虑标准中的9.5/1:Inaunion,atmostoneofthedatamemberscanbeactiveatanytime,thatis,thevalueofatmostoneofthedatamemberscanbestoredinaunionatanytime.

c++ - C++ 中的 union 和非默认可构造对象

我的程序中有一种情况,我需要进行一些从字符串到各种类型的转换,显然结果只能是一种类型。所以我选择创建一个union并将其命名为variant,如下所示:unionvariant{intv_int;floatv_float;doublev_double;longv_long;boost::gregorian::datev_date;//Compilercomplainsthisobjecthasauser-definedctorand/ornon-defaultctor.};我是这样使用的:boolConvert(conststd::string&str,variant&var){Str

c++ - 你可以在类声明中拥有而在 union 声明中永远不会遇到的一件事是什么?

我在网上看到这个面试题。可悲的是,我无法弄清楚这样的事情......函数,构造函数,析构函数顺便说一句,我认为struct和class在C++中几乎相同,除了类的成员默认是私有(private)的,而结构的成员默认是公共(public)的。类之间的继承默认也是私有(private)的,结构之间的继承默认是公有的。union与struct不同,因为它的所有成员都在同一个位置。谢谢 最佳答案 union不能有基类。union体也不能有任何具有非平凡特殊成员函数、虚拟成员函数、静态数据成员或引用数据成员的数据成员,但这些会出现在union

c++ - 这是 union 的正确用法吗

我想要命名字段而不是索引字段,但对于某些用途我必须迭代字段。愚蠢的简化示例:structnamed_states{floatspeed;floatposition;};#defineNSTATES(sizeof(structnamed_states)/sizeof(float))unionnamed_or_indexed_states{structnamed_statesnamed;floatindexed[NSTATES];}...unionnamed_or_indexed_statesstates,derivatives;states.named.speed=0;states.na

c++ - union 中的标量成员是否计入公共(public)初始序列?

在下面的unionU中,如果a或b是活跃成员,是否定义了访问c?structA{inta;};structB{inta;doubleb;};unionU{Aa;Bb;intc;};在[class.union],该标准定义了一些规则,使使用union更容易(强调我的):[ Note:Onespecialguaranteeismadeinordertosimplifytheuseofunions:Ifastandard-layoutunioncontainsseveralstandard-layoutstructsthatshareacommoninitialsequence,andifa

C++:包含类实例的 union 会调用错误的虚函数

我在运行以下代码时遇到了一个奇怪的现象:#includeclassPiece{public:classQueen;classKnight;unionAny;virtualconstchar*name()const=0;};classPiece::Queen:publicPiece{public:virtualconstchar*name()const{return"Queen";}};classPiece::Knight:publicPiece{public:virtualconstchar*name()const{return"Knight";}};unionPiece::Any{p

Java ChatGPT和文心一言是两个不同的工具,它们有着不同的用途和功能

JavaChatGPT和文心一言是两个不同的工具,它们有着不同的用途和功能。JavaChatGPT:ChatGPT是由OpenAI开发的自然语言处理模型,可以进行对话生成。它基于深度学习技术,通过训练大量的数据来理解用户输入并生成相应的回答。JavaChatGPT是将ChatGPT模型集成到Java中的一个库,使得在Java环境下可以方便地使用ChatGPT进行对话交互。文心一言:文心一言是一个提供随机古诗词、名言警句等的API接口。它收录了大量的经典古代文学作品,并根据用户的需求返回相应的内容。文心一言可以用于获取一些优美的古诗词或者名人名言,用于装饰页面、发送给好友等场景。所以,要选择哪个

c++ - C++中可变参数构造函数的用途是什么?

考虑以下程序:#includestructTest{Test(...){std::cout我认为它是可变构造函数。C++标准是否说构造函数可以是可变的?这样的构造函数有什么用?允许可变构造函数的理由是什么? 最佳答案 让我们试着一一回答您的问题:Ithinkitisvariadicconstructor.你是对的。DoestheC++standardsaysthatconstructorcanbevariadic?IANALL,但是,我认为是的。为什么不?构造函数只是一个(成员)函数。Whatistheuseofsuchconstr

c++ - C/C++ union 和未定义行为

以下是未定义的行为吗?union{intfoo;floatbar;}baz;baz.foo=3.14*baz.bar;我记得在两个序列点之间写入和读取同一底层内存是UB,但我不确定。 最佳答案 IrememberthatwritingandreadingfromthesameunderlyingmemorybetweentwosequencepointsisUB,butIamnotcertain.读取和写入同一表达式中的同一内存位置不会调用未定义的行为,除非该位置在两个序列点之间被修改多次,或者副作用相对于使用值计算的值是无序的相同

c++ - 在这种情况下,C++ 中的 union 做了什么?

在我工作的其中一个类中,我在头文件中发现了类似这样的内容://Flagsunion{DWORD_flags;struct{unsigned_fVar1:1;unsigned_fVar2:1;unsigned_fVar3:1;unsigned_fVar4:1;};};在一些类的成员函数中,我看到_flags被直接设置为_flags=3;。我还看到结构中的成员被直接设置,例如_fVar1=0并与之进行比较。我正在尝试删除_fVar1,我不确定它会对访问_flags和其他_fVar#的其他地方做什么或设置。例如,设置_flags=3是否意味着_fVar1和_fVar2将为1而_fVar3和_